﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;
using Entities;
using System.Collections;

namespace CuaHangBangDia.NV
{
    public partial class frmLuongNV : Form
    {
        private SapXepLV lvwColumnSorter;
        public frmLuongNV()
        {
            InitializeComponent();
            lvwColumnSorter = new SapXepLV();
            this.LVLuong.ListViewItemSorter = lvwColumnSorter;
        }
        private IGeneralRepository<LuongNV> repLuong = new GeneralRepository<LuongNV>();


        private void frmLuongNV_Load(object sender, EventArgs e)
        {
            LoadLuongNV();
            LoadCBB();
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            Reset();
        }

        private void Reset()
        {
            cbbNhanVien.SelectedIndex = 0;
            mtxtNgayCong.Text = "";
            mtxtLuongcoban.Text = "100000";
            mtxtluongthuong.Text = "";
            txtLuongchinh.Text = "";
            dtpThang.Value = DateTime.Now;
            lbLuongthuong.Text = "";
            lbsonc.Text = "";
        }
        private void LoadLuongNV()
        {

            LoadLuong(repLuong.GetAll().ToList());
            sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Lương của nhân viên";
        }

        private void LoadLuong(List<LuongNV> list)
        {
            LVLuong.Items.Clear();
            foreach (LuongNV l in list)
            {
                ListViewItem item = new ListViewItem(l.MaNV.ToString());
                item.SubItems.Add(l.HoTen.ToString());
                item.SubItems.Add(l.SoNgayCong.ToString());
                item.SubItems.Add(l.LuongCoBan.ToString());
                item.SubItems.Add(l.Thang.ToShortDateString());
                item.SubItems.Add(l.LuongThuong.ToString());
                item.SubItems.Add(l.LuongChinh.ToString());
                LVLuong.Items.Add(item);
            }
        }
        private LuongNV ThongTinTuForm()
        {

            LuongNV l = new LuongNV();

            l.SoNgayCong = Convert.ToInt32(mtxtNgayCong.Text);
            l.LuongCoBan = Convert.ToDouble(mtxtLuongcoban.Text);
            l.LuongThuong = Convert.ToDouble(mtxtluongthuong.Text);
            double i = (Convert.ToInt32(mtxtNgayCong.Text) * Convert.ToDouble(mtxtLuongcoban.Text)) + Convert.ToDouble(mtxtluongthuong.Text);
            txtLuongchinh.Text = Convert.ToString(i);
            l.LuongChinh = i;
            l.Thang = dtpThang.Value;
            return l;
        }
        private bool KiemTraThemLuong()
        {

            bool Sonc = false;
            if (mtxtNgayCong.Text == "")
            {
                lbsonc.Text = "Bạn chưa Nhập số ngày công của nhân viên ";
            }
            else
            {
                Sonc = true;
                lbsonc.Text = "";
            }
            bool luongcb = false;
            if (mtxtLuongcoban.Text == "")
            {
                lbLuongcoban.Text = "Bạn chưa nhập Lương cơ Bản";
            }
            else
            {
                luongcb = true;
                lbLuongcoban.Text = "";
            }
            bool luongthuong = false;
            if (mtxtluongthuong.Text == "")
            {
                lbLuongthuong.Text = "Bạn chưa Nhập Lương Thưởng";
            }
            else
            {
                luongthuong = true;
                lbLuongthuong.Text = "";
            }

            return (Sonc && luongcb && luongthuong);
        }
        //private bool KiemTraNgaycong(int n)
        //{
        //    n = 31;
        //    if (Convert.ToInt32(mtxtNgayCong.Text) > n)
        //    {
        //        MessageBox.Show("Số Ngày công vượt quá số ngày cho phép","Thông Báo");
        //        return false;
        //    }
        //    return true;
        //}

        private void LoadCBB()
        {
            List<NhanVien> list = NhanVien.Objects.GetAll().ToList();
            foreach (NhanVien nv in list)
            {
                cbbNhanVien.Items.Add(nv);

            }
            cbbNhanVien.DisplayMember = "HoTen";
            cbbNhanVien.ValueMember = "MaNV";
            cbbNhanVien.Items.Insert(0, "Chọn Nhân Viên");
            cbbNhanVien.SelectedIndex = 0;
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            LuongNV l = new LuongNV();
            if (cbbNhanVien.SelectedIndex == 0)
            {
                MessageBox.Show("Vui Lòng chọn nhân viên cần tính Lương");
            }
            else
            {
                if (KiemTraThemLuong())
                {

                    NhanVien nv = (NhanVien)cbbNhanVien.SelectedItem;
                    l.MaNV = nv.MaNV;
                    l.HoTen = nv.HoTen;
                    l.SoNgayCong = Convert.ToInt32(mtxtNgayCong.Text);
                    if (l.SoNgayCong > 31)
                        lbsonc.Text = "Số ngày công không được quá 31 ngày";
                    else
                    {
                        l.LuongCoBan = Convert.ToInt32(mtxtLuongcoban.Text);
                        l.LuongThuong = Convert.ToInt32(mtxtluongthuong.Text);
                        double i = (Convert.ToInt32(mtxtNgayCong.Text) * Convert.ToDouble(mtxtLuongcoban.Text)) + Convert.ToDouble(mtxtluongthuong.Text);
                        txtLuongchinh.Text = Convert.ToString(i);
                        l.LuongChinh = i;
                        l.Thang = dtpThang.Value;                        
                        List<LuongNV> o = LuongNV.Objects.Find(t => t.Thang.Month == l.Thang.Month && t.Thang.Year == l.Thang.Year).ToList();
                        if (o.Count > 0)
                            MessageBox.Show("Lương Tháng " + l.Thang.Month + "/" + l.Thang.Year + " của nhân viên này đã tồn tại");
                        else
                        {
                            if (LuongNV.Objects.Insert(l))
                            {
                                MessageBox.Show("Thêm Lương Nhân Viên Thành Công", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                LoadLuongNV();
                                Reset();
                            }
                            else
                            {
                                MessageBox.Show("Thêm không thành công ", "Thông Báo");
                            }
                        }
                    }
                }
            }
            sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Lương của nhân viên";
        }



        private void txtHT_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");                
            }

            else
            {
                e.Handled = false;
            }
        }

        private void mtxtNgayCong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }

        private void LVLuong_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (e.Column == lvwColumnSorter.SortingColumnIndex)
            {
                if (lvwColumnSorter.SortingOrder == SortOrder.Ascending)
                    lvwColumnSorter.SortingOrder = SortOrder.Descending;

                else lvwColumnSorter.SortingOrder = SortOrder.Ascending;
            }
            else
            {
                lvwColumnSorter.SortingColumnIndex = e.Column;
                lvwColumnSorter.SortingOrder = SortOrder.Ascending;
            }
            LVLuong.Sort();
        }

        private void mtxtluongthuong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }

        private void mtxtLuongcoban_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void LVLuong_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (LVLuong.SelectedItems.Count > 0)
                {
                    ListViewItem item = LVLuong.SelectedItems[0];
                    cbbNhanVien.Text = item.SubItems[1].Text;
                    mtxtNgayCong.Text = item.SubItems[2].Text;
                    mtxtLuongcoban.Text = item.SubItems[3].Text;
                    dtpThang.Value = Convert.ToDateTime(item.SubItems[4].Text);
                    mtxtluongthuong.Text = item.SubItems[5].Text;
                    txtLuongchinh.Text = item.SubItems[6].Text;
                }
            }
            catch
            {
            }
        }

        //private int LaySTT()
        //{
        //    if (LVLuong.SelectedItems.Count > 0)
        //    {
        //        string manv = LVLuong.SelectedItems[0].SubItems[0].Text;
        //        int stt;
        //        List<LuongNV> list = new List<LuongNV>();
        //        list = repLuong.Find(t => t.MaNV.ToString() == manv).ToList();

        //    }
        //    else
        //        return 0;         
        //}
        private void btnCapNhat_Click(object sender, EventArgs e)
        {

            LuongNV l = new LuongNV();
            NhanVien nv = (NhanVien)cbbNhanVien.SelectedItem;
            l.MaNV = nv.MaNV;
            l.HoTen = nv.HoTen;
            l.SoNgayCong = Convert.ToInt32(mtxtNgayCong.Text);
            l.LuongCoBan = Convert.ToDouble(mtxtLuongcoban.Text);
            l.LuongThuong = Convert.ToDouble(mtxtluongthuong.Text);
            double i = (Convert.ToInt32(mtxtNgayCong.Text) * Convert.ToDouble(mtxtLuongcoban.Text)) + Convert.ToDouble(mtxtluongthuong.Text);
            txtLuongchinh.Text = Convert.ToString(i);
            l.LuongChinh = i;
            l.Thang = dtpThang.Value;
            if (repLuong.Update(l))
            {
                MessageBox.Show("Đã cập nhật lại thông tin Lương của nhân viên: " + l.MaNV, "Thông Báo");
                LoadLuongNV();
                //Reset();
            }
            else
                MessageBox.Show("Cập nhật Lương nhân viên không thành công", "Thông Báo");

        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (LVLuong.CheckedItems.Count > 0)
            {
                if (MessageBox.Show("Bạn có muốn xóa những nhân viên đã chọn", "Thông báo", MessageBoxButtons.OKCancel) == DialogResult.OK) ;
                {

                    foreach (ListViewItem item in LVLuong.CheckedItems)
                    {
                        LuongNV d = LuongNV.Objects.GetById(Convert.ToDateTime(item.SubItems[4].Text));
                        if (repLuong.Xoa(t => t.Thang.Month == d.Thang.Month && t.Thang.Year == d.Thang.Year))
                        {
                            MessageBox.Show("Xóa Nhân Viên Thành công", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            LoadLuongNV();
                            Reset();
                        }
                        else
                            MessageBox.Show("Lỗi trong quá trình xóa !");
                    }

                    sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Lương của nhân viên";
                }
            }
            else MessageBox.Show("Chọn  nhân viên cần xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (rdMa.Checked)
            {
                LVLuong.Items.Clear();
                List<LuongNV> list = new List<LuongNV>();
                list = repLuong.Find(t => t.MaNV.Contains(txtTimKiem.Text)).ToList();
                foreach (LuongNV l in list)
                {
                    ListViewItem item = new ListViewItem(l.MaNV.ToString());
                    item.SubItems.Add(l.HoTen.ToString());
                    item.SubItems.Add(l.SoNgayCong.ToString());
                    item.SubItems.Add(l.LuongCoBan.ToString());
                    item.SubItems.Add(l.Thang.ToShortDateString());
                    item.SubItems.Add(l.LuongThuong.ToString());
                    item.SubItems.Add(l.LuongChinh.ToString());
                    LVLuong.Items.Add(item);
                }
                sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Lương của nhân viên";
            }
            else
            {
                if (rdHoTen.Checked)
                {
                    LVLuong.Items.Clear();
                    List<LuongNV> list = new List<LuongNV>();
                    list = repLuong.Find(t => t.HoTen.Contains(txtTimKiem.Text)).ToList();
                    foreach (LuongNV l in list)
                    {
                        ListViewItem item = new ListViewItem(l.MaNV.ToString());
                        item.SubItems.Add(l.HoTen.ToString());
                        item.SubItems.Add(l.SoNgayCong.ToString());
                        item.SubItems.Add(l.LuongCoBan.ToString());
                        item.SubItems.Add(l.Thang.ToShortDateString());
                        item.SubItems.Add(l.LuongThuong.ToString());
                        item.SubItems.Add(l.LuongChinh.ToString());
                        LVLuong.Items.Add(item);
                    }
                    sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Bảng Lương của nhân viên";
                }
                else
                {
                    if (rdNgayCong.Checked)
                    {
                        LVLuong.Items.Clear();
                        List<LuongNV> list = new List<LuongNV>();
                        list = repLuong.Find(t => t.SoNgayCong == Convert.ToInt32(txtTimKiem.Text)).ToList();
                        foreach (LuongNV l in list)
                        {
                            ListViewItem item = new ListViewItem(l.MaNV.ToString());
                            item.SubItems.Add(l.HoTen.ToString());
                            item.SubItems.Add(l.SoNgayCong.ToString());
                            item.SubItems.Add(l.LuongCoBan.ToString());
                            item.SubItems.Add(l.Thang.ToShortDateString());
                            item.SubItems.Add(l.LuongThuong.ToString());
                            item.SubItems.Add(l.LuongChinh.ToString());
                            LVLuong.Items.Add(item);
                        }
                        sttLuong.Text = "Bảng Lương có : " + LVLuong.Items.Count + " Lương của nhân viên";
                    }
                    //else
                    //{
                    //    MessageBox.Show("Thông tin tìm kiếm không hợp lệ","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                    //}
                }
            }
        }

        private void mtxtNgayCong_TextChanged(object sender, EventArgs e)
        {
            lbLuongthuong.Text = "";
            lbsonc.Text = "";
            //    double i = (Convert.ToInt32(mtxtNgayCong.Text) * Convert.ToDouble(mtxtLuongcoban.Text)) + Convert.ToDouble(mtxtluongthuong.Text);
            //    txtLuongchinh.Text = Convert.ToString(i);
        }

        private void mtxtluongthuong_TextChanged(object sender, EventArgs e)
        {

            if (mtxtluongthuong.Text == "" && mtxtNgayCong.Text == "")
            {
                txtLuongchinh.Text = "0";
            }
            else
            {
                if (mtxtluongthuong.Text == "")
                    mtxtluongthuong.Text = Convert.ToString(0);
                double i = ((Convert.ToDouble(mtxtNgayCong.Text) * Convert.ToDouble(mtxtLuongcoban.Text)) + Convert.ToDouble(mtxtluongthuong.Text));
                txtLuongchinh.Text = Convert.ToString(i);
            }
        }



    }
}
